"""
列表推导式更具可读性
"""
import array

def str_to_unicode(symbols="adb&"):
    """
    把一个字符串变成Unicode码位的列表
    使用for循环
    :param symbols:
    :return:
    """
    codes = []
    for symbol in symbols:
        codes.append(ord(symbol))

    return codes


def str_to_unicode_another(symbols="adb&"):
    """
    把一个字符串变成Unicode码位的列表
    使用列表推导式
    :param symbols:
    :return:
    """

    codes = [ord(symbol) for symbol in symbols]
    return codes


def map_filter(symbols="adb&"):
    """
    用列表推导式和map/filter组合创建同样的的列表
    :param symbols:
    :return:
    """

    # 列表推导式
    res = [ord(symbol) for symbol in symbols if ord(symbol) > 90]

    # map/filter
    res_map = list(filter(lambda a: a > 90, map(ord, symbols)))
    return res, res_map


def generator(symbols="adb&"):
    """
    使用生成器表达式初始化元组和数组
    :param symbols:
    :return:
    """
    t = tuple(ord(symbol) for symbol in symbols)  #如果生成器表达式是函数的唯一参数，则不需要用括号把它围起来
    a = array.array('I', (ord(symbol) for symbol in symbols))
    return t, a


if __name__ == '__main__':
    print(generator())
    print(map_filter())

    print(str_to_unicode())
    print(str_to_unicode_another())